package com.run2code.log.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 业务日志注解
 * 关注公众号【奔跑的码畜】，一起进步不迷路
 *
 * @author 第七人格
 * @date 2023/10/13
 */
// 用于指示将被注解的元素包含在生成的Java文档中
@Documented
// 表明这个注解可以修饰(作用)在方法上
@Target(ElementType.METHOD)
// 对应Java代码的加载和运行顺序
// 范围大小：java源文件<.class文件<内存字节码
@Retention(RetentionPolicy.RUNTIME)
// 表明这个注解可以被子类继承
@Inherited
// 表示这个注解可以被重复使用
@Repeatable(BizLogs.class)
public @interface BizLog {
    /**
     * 操作者，必填
     */
    String operator();

    /**
     * 成功模板，必填
     */
    String success();

    /**
     * 系统，默认取spring-application-name
     */
    String system() default "";

    /**
     * 模块
     */
    String module() default "";

    /**
     * 操作类型：比如增删改查
     */
    String type() default "";

    /**
     * 关联的业务id
     */
    String bizNo() default "";

    /**
     * 失败模板
     */
    String fail() default "";


    /**
     * 拓展字段
     * 记录更详细的其他信息
     */
    String detail() default "";

    /**
     * 记录条件 默认 true
     * true代表要记录，false代表不记录
     */
    String condition() default "";

}
